

/*
 * 
 * 通用ajax后台调用函数 param url:ajax 调用的后台响应url param param:ajax 调用后台传递参数(post method)
 * param callbackTarget 调用成功后回调函数目标对象 param callbackFunc 调用成功后执行的回调函数，回调函数接受两个参数
 * 回调函数参数: param callbackTarget: 回调目标对象 param r : json格式数据对象(ajax调用返回的远程数据))
 */
define(["jquery","ajaxServ","formServ","msgServ"], function($,ajaxServ,formServ,msgServ) {

	'use strict';	
	

	var msgServ = require('msgServ'), private_method = null;

	// 默认参数
	var default_setting = {
		url : null,
		param : null,
		dataType : 'json',
		type : 'post',
		contentType : "json",
		callback : null,
		callbackParam : null,
		successMsg : null,
		error : null,
		backData : null
	};

	var public_method = {
		
		/**
		 * 流程签收
		 * @param _options.flowInstId	流程实例id
		 * @param _options.flowTaskId		流程实例节点id
		 * @param _options.signInfo		节点签收信息
		 * @param _options.flowSignUrl  签收url
		 * @param _options.refreshGrid	待刷新的流程执行信息表格	
		 
		 */
		sign:function(_options){
			if((_options.flowInstId)&&(_options.flowTaskId)&&(_options.signInfo)&&(_options.flowSignUrl)){
				
				var _data = {signInfo:_options.signInfo,
							 flowInstId:_options.flowInstId,
							 flowTaskId:_options.flowTaskId}
							 
				ajaxServ.runAjax({
					url:_options.flowSignUrl,				 	
				 	data:_data,
				 	callback:function(){public_method.signCallBack(_options)}
				})
			}
		},
		/**
		 * 签收回调刷新
		 * @param _options.bizGrid	呆刷新的业务表格
		 * @param _options.refreshGrid	待刷新的流程执行信息表格		
		 */
		signCallBack:function(_options){
			
			if(_options.refreshGrid){
				$(_options.refreshGrid).datagrid('reload')
				msgServ.Msgslide('签收操作成功！');
			}
		},
		
		
		/**
		 * 流程签收
		 * @param _options.flowInstId	流程实例id
		 * @param _options.flowTaskId		流程实例节点id
		 * @param _options.signInfo		节点签收信息
		 * @param _options.flowTaskCompleteUrl  执行url
		 * @param _options.refreshGrid	待刷新的业务信息列表
		 * @param _options.closeWindow	待关闭的业务表单窗口	
		 * @param _options.externalValue	扩展参数
		 * @param evt					按钮事件
		 */
		taskComplete:function(_options,evt){
			
			if(_options.form){				
				 
				var _forms = $(_options.form)
				var validateStatus =private_method.validateForm({form:_forms})
				if(!validateStatus){
					msgServ.Msgslide("请填写表单内容");
					if(evt && evt.currentTarget){
						$(evt.currentTarget).linkbutton('enable');
					}
					return
				}
				var formData = formServ.getDataObj({
					form : $(_options.form)
				});
				
				//扩展参数
				if(_options.externalValue){
					$.extend(formData,_options.externalValue)
				}
				if(_options.flowid && _options.fullBizcode){
					if(formData){
						if(!formData.flowid){
							formData.flowid = _options.flowid
						}
						
						if(!formData.fullBizcode){
							formData.fullBizcode = _options.fullBizcode
						}
					}
				}
				if(_options.flowTaskCompleteUrl){					
					
					var _data = $.toJSON(formData);
					
					ajaxServ.runAjax({
						url:_options.flowTaskCompleteUrl,
						contentType : 'json',
					 	data:_data,
					 	callback:function(data){public_method.taskCompleteCallBack(_options,evt)}
					})
				}
			}
		},
		
		/**
		 * 流程签收
		 * @param _options.flowInstId	流程实例id
		 * @param _options.flowTaskId		流程实例节点id
		 * @param _options.signInfo		节点签收信息
		 * @param _options.flowSendbackUrl  执行url
		 * @param _options.refreshGrid	待刷新的业务信息列表
		 * @param _options.closeWindow	待关闭的业务表单窗口	
		 * @param evt					按钮事件
		 */
		sendBack:function(_options,evt){
			
			if(_options.form){
				
				var formData = formServ.getDataObj({
					form : $(_options.form)
				});
				
				if(_options.flowid && _options.fullBizcode &&_options.flowSendbackUrl){
					if(formData){
						if(!formData.flowid){
							formData.flowid = _options.flowid
						}
						
						if(!formData.fullBizcode){
							formData.fullBizcode = _options.fullBizcode
						}
					}
					
					var _data = $.toJSON(formData);
					
					ajaxServ.runAjax({
						url:_options.flowSendbackUrl,
						contentType : 'json',
					 	data:_data,
					 	callback:function(data){
					 		_options.data = data;
					 		public_method.sendBackCallBack(_options,evt)
					 	}
					})
					
				}else{
					if(evt && evt.currentTarget){
						$(evt.currentTarget).linkbutton('enable');
					}
				}
				
			}
		},
		/**
		 * 流程执行回调刷新
		 * @param _options.closeWindow	待关闭的业务表单窗口
		 * @param _options.refreshGrid	待刷新的流程执行信息表格	
		 * @param evt					按钮事件	
		 */
		sendBackCallBack:function(_options,evt){
			
			if(_options.data && _options.data.status){
				if(_options.data.status =='success'){
					if(_options.closeWindow){
						$(_options.closeWindow).window('close')				
					}
					if(_options.refreshGrid){
						$(_options.refreshGrid).datagrid('reload')
						$(_options.refreshGrid).datagrid('clearSelections')
						
						
						msgServ.Msgslide('流程操作成功！');					
					}
				}else{
					if(_options.data.msg){
						msgServ.Msgslide(_options.data.msg);
					}else{
						msgServ.Msgslide("操作失败,请重新执行一遍.如多次出现此问题,请联系系统管理员!");
					}
				}
			}
			
			if(evt && evt.currentTarget){
				$(evt.currentTarget).linkbutton('enable');
			}
			
		},
		/**
		 * 流程执行回调刷新
		 * @param _options.closeWindow	待关闭的业务表单窗口
		 * @param _options.refreshGrid	待刷新的流程执行信息表格	
		 * @param evt					按钮事件	
		 */
		taskCompleteCallBack:function(_options,evt){
			if(_options.closeWindow){
				$(_options.closeWindow).window('close')				
			}
			if(_options.refreshGrid){
				$(_options.refreshGrid).datagrid('reload')
				$(_options.refreshGrid).datagrid('clearSelections')
				
				if(evt && evt.currentTarget){
					$(evt.currentTarget).linkbutton('enable');
				}
				msgServ.Msgslide('流程操作成功！');				
			}
		},
		/**
		 * 后台ajax调用，返回调用结果数据
		 * 
		 * @param _options
		 *            ajax调用所需url,data,content等封装信息
		 * @param callbackFunc
		 *            回调函数
		 * @return 调用成功后，执行回调函数callbackFunc
		 * 
		 */
		runAjax : function(options, callbackFunc) {
			var args = $.extend(default_setting, options || {});

			var _method = args.method;

			if (_method) {
				if (_method == 'del')
					args.contentType = 'application/x-www-form-urlencoded; charset=UTF-8';
			}

			var _cType = args.contentType;
			if (_cType) {
				switch (_cType) {
					case 'form' :
						args.contentType = 'application/x-www-form-urlencoded; charset=UTF-8';
						break;
					case 'json' :
						args.contentType = "appliction/json;charset=utf-8";
						break;

				}
			}
			$.ajax({
						url : args.url,
						dataType : args.dataType,
						type : args.type,
						data : args.data,
						contentType : args.contentType,
						success : callbackFunc,
						error : function(jqXHR, textStatus, errorThrown) {
							// $.messager.alert('提示','加载失败,请重新刷新页面');							
							msgServ.Msgslide('操作失败,请重新刷新页面，如果问题仍旧存在，请联系系统管理员处理。');
						}
					});
		}

	};
	
	var private_method = {
		/**
		 * 验证form表单
		 * @param _options.form
		 */
		validateForm:function(_options){
			var _forms,validateStatus
			if(_options && _options.form){
				_forms = $(_options.form)
			}
			if(_forms.length>1 ){
				$.each(_forms,function(i,_f){
					validateStatus =$(_f).form('enableValidation').form('validate');
					if(!validateStatus){
						return false;
					}
				})
			}else{
				validateStatus =_forms.form('enableValidation').form('validate');
			}
			
			return validateStatus
		}
	}
	return public_method;
});
